package com.sxj.corejava.code08_常用类.String;

import java.util.Arrays;

/**
 * @author 石小俊
 */
public class Test07_正则表达式 {

    public static void main(String[] args) {
        // 方法调用者是需要判断的字符串
        // 方法参数是正则表达式规则
        // s.matches(regExp);
        // 指定字符串是一个a
        System.out.println("a".matches("a"));
        // 指定字符串是一个出现了2次的a
        System.out.println("aa".matches("a{2}"));
        // 指定字符串是一个至少出现2次的a
        System.out.println("aaaaaaa".matches("a{2,}"));
        // 指定字符串是一个至少出现2次,最多出现5次的a
        System.out.println("aaaaa".matches("a{2,5}"));
        // 至少出现1次
        System.out.println("aaaaa".matches("a+"));
        System.out.println("".matches("a+"));
        // 0或多次
        // 0次
        System.out.println("".matches("a*"));
        System.out.println("aaa".matches("a*"));
        System.out.println("ab".matches("a*"));
        // 0或1次
        System.out.println("".matches("a?"));
        System.out.println("a".matches("a?"));
        System.out.println("aa".matches("a?"));

        // 匹配多种字符
        System.out.println("ab".matches("[abcd123]*"));
        System.out.println("a12b".matches("[abcd123]*"));
        System.out.println("a124b".matches("[abcd123]*"));
        // 匹配所有小写英文字母
        System.out.println("admin".matches("[a-z]*"));
        System.out.println("Hello".matches("[a-z]*"));
        // 匹配所有大写英文字母
        System.out.println("ADMIN".matches("[A-Z]*"));
        System.out.println("Hello".matches("[A-Z]*"));
        // 匹配所有英文字母
        System.out.println("Hello".matches("[a-zA-Z]*"));
        // 匹配所有数字
        System.out.println("1234567890".matches("[0-9]*"));
        // 匹配所有数字和英文字母
        System.out.println("Hello123admin".matches("[0-9a-zA-Z]*"));
        // 匹配所有英文字母、数字和下划线
        System.out.println("Hello_World_123_admin".matches("[0-9a-zA-Z_]*"));
        System.out.println("Hello_World_123_admin".matches("\\w+"));
        // 匹配除了英文字母、数字和下划线以外的字符
        System.out.println("!@#$%".matches("\\W+"));
        // 匹配所有数字
        System.out.println("123".matches("\\d+"));
        // 匹配除了数字以外的字符
        System.out.println("admin".matches("\\D+"));

        // 匹配除了换行符以外的所有字符
        System.out.println("admin123Hello!@#$%^&*".matches(".+"));
        // 匹配空格
        System.out.println("    ".matches("\\s+"));
        // 匹配除了空格以外的字符
        System.out.println("HelloWorld".matches("\\S+"));

        // 匹配3或5个数字
        System.out.println("123".matches("\\d{3}|\\d{5}"));
        System.out.println("1234".matches("\\d{3}|\\d{5}"));
        System.out.println("12345".matches("\\d{3}|\\d{5}"));

        System.out.println("123".matches("\\d{3}(\\d{2})?"));
        System.out.println("1234".matches("\\d{3}(\\d{2})?"));
        System.out.println("12345".matches("\\d{3}(\\d{2})?"));

        System.out.println("*******************replaceAll*******************");
        // 替换所有
        String s = "Hello World I am admin";
        s = s.replace(" ", "-");
        System.out.println(s);

        s = "Hello123World12I31am5admin";
        // 将所有数字替换成空格
        System.out.println(s.replaceAll("\\d", " "));
        ;
        // 将所有的连续的数字替换成一个空格
        System.out.println(s.replaceAll("\\d+", " "));
        ;
        System.out.println("*******************replaceFirst*******************");
        // 替换第一个
        System.out.println(s.replaceFirst("\\d+", " "));
        ;
        System.out.println("*******************split*******************");
        // 支持正则表达式规则,可以根据指定正则分隔字符串
        String[] arr = s.split("\\d+");
        System.out.println(Arrays.toString(arr));
    }

}
